#include "exit.h"
#include "gd32f4xx.h"
#include "systick.h"
#include "adc.h"

void exit6_init(void){
    // 使能GPIOA和SYSCFG时钟
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_SYSCFG);

    // 设置GPIOA第6个引脚为输入模式
    gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_6);

    // 配置EXTI6线路连接到GPIOA6
    syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN6);

    // 配置EXTI6为上升沿中断
    exti_init(EXTI_6, EXTI_INTERRUPT, EXTI_TRIG_RISING);
    exti_interrupt_flag_clear(EXTI_6);

    // 使能NVIC中断
    nvic_irq_enable(EXTI5_9_IRQn, 3, 0);
}



void EXTI5_9_IRQHandler(void) {
    delay_1ms(10);
    if (exti_interrupt_flag_get(EXTI_6)) { // 推荐用库函数判断
        handle = 1; // 设置标志位
        delay_1ms(10);
        exti_interrupt_flag_clear(EXTI_6); // 推荐用库函数清除
        // 不要在中断里延时和使能/失能NVIC
    }
}


void real_func(){
    // 这里可以添加实际的处理逻辑
    // 例如，切换LED状态或执行其他操作
    if (handle) {
        handle = 0; // 重置标志位
        gpio_bit_toggle(GPIOA, GPIO_PIN_0); // 切换GPIOC PIN2状态
            char buf[50]; // 缓冲区
        // 逐字节发送
        for(int i = 0; i < my_float_to_str(my_adc_to_voltage(adc0_get_pc0_value(), 3.3f),buf); i++) {
            usart_data_transmit(USART0, buf[i]);
            while (usart_flag_get(USART0, USART_FLAG_TBE) == RESET);
        }
        //发送结束信号
        usart_data_transmit(USART0, '\n'); // 发送换行符
        delay_1ms(3000); // 延时1秒
    }
}
